/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.filter;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

import com.example.plasma.R;

public class MosaicActivity extends Activity
{
	public final String TAG = "SampleActivity";
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main_layout);
		mFrame = new Frame(this);
		mFrame.changeStatus(Frame.LAUNCHER);
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		return mFrame.onCreateOptionMenu(menu, getMenuInflater());
	}
	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		mFrame.onPrepareOptionsMenu(menu);
		return super.onPrepareOptionsMenu(menu);
	}
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		mFrame.onOptionsItemSelected(item);
		return super.onOptionsItemSelected(item);
	}
	@Override
	public void onConfigurationChanged(Configuration newConfig)
	{
		super.onConfigurationChanged(newConfig);
	}
	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		if(resultCode == Activity.RESULT_OK && data != null)
		{
			if(mFrame != null)
			{
				mFrame.changeStatus(Frame.MOSAIC);
				mFrame.setMosaicViewNUri(data.getData());
			}
			//			Uri uri = data.getData();
			//			mMosaicView.initView(uri);
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
	@Override
	public void onDestroy()
	{
		if(mFrame != null)
		{
			mFrame.destroy();
		}
		//		if(mMosaicView != null)
		//			mMosaicView.destroy();
		super.onDestroy();
	}
	@Override
	public void onBackPressed()
	{
		if(mFrame != null)
			mFrame.backPressed();
		else
			super.onBackPressed();
	}
	private Frame mFrame = null;
	//	private MosaicView mMosaicView = null;
}

//class MosaicView extends ImageView {
//	private Bitmap mInputBitmap, mOutputBitmap;
//	private long mStartTime, mEndTiime;
//	private Context mContext = null;
//	public MosaicView(final Context context) {
//		super(context);
//		mContext = context;
//	}
//	public void initView(Uri uri)
//	{
//		if(uri != null)
//		{
//			mInputBitmap = decoding( uri);
//			mOutputBitmap = Bitmap.createBitmap(mInputBitmap.getWidth(), mInputBitmap.getHeight(), Bitmap.Config.ARGB_8888);
//			Log.i("test", "image size:"+mInputBitmap.getWidth() +","+ mInputBitmap.getHeight());
//			setScaleType(ScaleType.FIT_CENTER);
//			setImageBitmap(mInputBitmap);
//			EffectJNI.nativeMakeGrid(mInputBitmap);
//			setOnClickListener(new OnClickListener() {
//
//				public void onClick(View v) {
//					mStartTime = System.currentTimeMillis();
//					EffectJNI.nativeMosaic(mInputBitmap, mOutputBitmap);
//					setImageBitmap(mOutputBitmap);
//					setOnClickListener(null);
//					mEndTiime = System.currentTimeMillis();
//					Toast.makeText(mContext, "nativeMakeGrid time:"+(mEndTiime - mStartTime), Toast.LENGTH_LONG).show();
//				}
//			});
//		}
//	}
//	public void destroy()
//	{
//		EffectJNI.nativeFree();
//	}
//	private Bitmap decoding(Uri uri)
//	{
//		float scale = 1.f;
//		Bitmap bitmap = null;
//		Matrix matrix = new Matrix();
//		BitmapFactory.Options option = new BitmapFactory.Options();
//		option.inJustDecodeBounds = true;
//
//		InputStream is = null;
//		try {
//			is = mContext.getContentResolver().openInputStream(uri);
//		} catch (FileNotFoundException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		} 
//
//		BitmapFactory.decodeStream(is, null, option);
//		int imageSize = option.outWidth * option.outHeight;
//		int rotate = getRotateDegree(mContext.getContentResolver(), uri);
//		if(rotate == 0){
//			matrix.postRotate(0);
//		}
//		else if(rotate == 90){
//			matrix.postRotate(90);
//		}
//		else if (rotate == 180){
//			matrix.postRotate(180);
//		}
//		else if (rotate == 270){
//			matrix.postRotate(270);	    	    				
//		}
//		else{
//			rotate = 0;
//		}
//
//		int sampleSize = getSampleSize(FloatMath.sqrt(imageSize), FloatMath.sqrt(MAX_IMAGE_SIZE));
//		option.inJustDecodeBounds = false;
//		option.inSampleSize = sampleSize;
//		option.inPreferredConfig = Config.ARGB_8888;
//		option.inMutable = true;
//
//		try {
//			is = mContext.getContentResolver().openInputStream(uri);
//		} catch (FileNotFoundException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		} 
//
//		bitmap = BitmapFactory.decodeStream(is, null, option);
//		imageSize = bitmap.getWidth() * bitmap.getHeight();
//
//		scale = FloatMath.sqrt(MAX_IMAGE_SIZE / (float)(imageSize));
//		if(scale > 0.999f && scale < 1.f)
//			scale = 0.999f;
//		matrix.postScale(scale, scale);
//
//		return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
//	}
//	private int getSampleSize(float bitmapSize, float maxSize)
//	{
//		int ret = 1;
//		for(int i = 1; (bitmapSize / i) > maxSize ; i*=2)
//		{
//			ret = i;
//		}
//
//		return ret;
//	}
//	public int getRotateDegree(ContentResolver cr, Uri uri)
//	{
//		if(cr != null && uri != null)
//		{
//			ExifInterface exif;
//			int exifOrientation = -1;
//			String path;
//			if(uri.toString().contains("/mnt/sdcard"))
//			{
//				path = uri.getPath();
//			}
//			else
//			{
//				String[] proj = { MediaStore.Images.Media.DATA /*, MediaStore.Images.Media.MIME_TYPE*/};
//				Cursor cursor = null;
//
//				try{
//					cursor = cr.query(uri,
//							proj, // Which columns to return
//							null, // WHERE clause; which rows to return (all rows)
//							null, // WHERE clause selection arguments (none)
//							null);
//				}catch(SQLiteException e){
//					e.printStackTrace();
//					return -1;
//				}
//				if(cursor == null)
//				{
//					path = null;
//					return -1;
//				}
//				int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);		
//				cursor.moveToFirst();
//				if(cursor.getCount() == 0)
//				{
//					if(cursor != null)
//						cursor.close();
//					cursor = null;
//					return -1;
//				}
//
//				if(cursor.isNull(column_index))
//				{
//					if(cursor != null)
//						cursor.close();
//					cursor = null;
//
//					String temp = "Unknown Jpeg"; 
//					path = temp;
//				}
//				else
//				{
//					cursor.moveToFirst();
//					String ret = cursor.getString(column_index);
//					if(cursor != null)
//						cursor.close();
//					cursor = null;
//					path = ret;
//				}				
//			}
//			if(path == null)
//				return -1;
//			try {
//				exif = new ExifInterface(path);
//				if(exif != null){
//					exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_NORMAL);
//					if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_90)
//					{
//						return 90;
//					}
//					else if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_180)
//					{
//						return 180;
//					}
//					else if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_270)
//					{
//						return 270;
//					}
//					return 0;
//				}
//			} catch (IOException e) {
//				e.printStackTrace();
//				return -1;
//			}
//		}
//		return -1;
//	}
//	private final int MAX_IMAGE_SIZE = 2000000;
//}
